Paradigma fungsional menggeser pola pikir pengembang dari "memperbarui kotak berstatus" menjadi menerapkan transformasi matematis ke nilai yang tidak dapat diubah. Di Elixir, data tidak pernah diubah; hanya dilahirkan kembali dalam bentuk baru.
1. Asumsi Matematis
Ketika Anda menulis $x = a + 1$, Anda tidak sedang mengalokasikan hasil ke variabel. Sebaliknya, Anda hanya secara sederhana mengklaim bahwa ekspresi $x$ dan $a + 1$ memiliki nilai yang sama. Ini mencerminkan logika aljabar di mana $x$ mewakili nilai tetap dalam konteks tertentu.
2. Imutabilitas sebagai Jaminan
Di Elixir, semua nilai bersifat tidak dapat diubah. Data tidak dapat diubah setelah dibuat. Ini menghilangkan "efek samping" di mana suatu fungsi bisa secara tak terduga mengubah variabel global atau objek yang dikirimkan, memastikan kode bersifat prediktif dan aman untuk threading.
3. Transformasi vs. Mutasi
Kita tidak pernah mengubah data secara langsung. Elixir tidak memiliki operasi penugasan; sebaliknya, ia berusaha untuk menyesuaikan nilai dengan pola. Untuk "mengubah" nilai, kita melewati data asli melalui fungsi untuk menghasilkan versi yang benar-benar baru.
"elixir"
iex> cap_name = String.capitalize name
"Elixir"
iex> name
"elixir" (Masih utuh!)